package model;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import javax.swing.ImageIcon;

/**
 * @author Jeppe
 */
public class Auktion{

    private double startbud;
    private Calendar startTidspunkt;
    private Calendar sluttidspunkt;
    private ArrayList<Bud> budHistorik;
    private Bruger bruger;
    private Vare vare;
    private Image img;
    private ArrayList<ActionListener> listeners;

    public Auktion(double startbud, Calendar startTidspunkt, Calendar sluttidspunkt, Bruger bruger, Vare vare) {
        this.listeners = new ArrayList();
        this.startbud = startbud;
        this.startTidspunkt = startTidspunkt;
        this.sluttidspunkt = sluttidspunkt;
        budHistorik = new ArrayList<>();
        this.bruger = bruger;
        this.vare = vare;
    }

    public void notifyListeners(String str) {
        ActionEvent event = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, str);
        if (listeners.size() > 0) {
            for (int i = 0; i < listeners.size(); i++) {
                listeners.get(i).actionPerformed(event);
            }
        }
    }

    public void addListener(ActionListener listener) {
        listeners.add(listener);
    }

    public double getStartbud() {
        return startbud;
    }

    public Calendar getStartTidspunkt() {
        return startTidspunkt;
    }

    public Calendar getSluttidspunkt() {
        return sluttidspunkt;
    }

    public ArrayList<Bud> getBudHistorik() {
        return budHistorik;
    }

    public ArrayList<Bud> getReversedBudHistorik() {
        ArrayList<Bud> budHistorikReversed = budHistorik;
        Collections.reverse(budHistorikReversed);
        return budHistorikReversed;
    }

    public Bud getSenesteBud() {
        Bud senesteBud;
        Collections.sort(budHistorik);
        if (budHistorik.isEmpty()) {
            senesteBud = new Bud(startTidspunkt, startbud);
        } else {
            senesteBud = budHistorik.get(budHistorik.size() - 1);
        }
        return senesteBud;
    }

    public Bruger getBruger() {
        return bruger;
    }

    public Vare getVare() {
        return vare;
    }

    public void setStartbud(double startbud) {
        this.startbud = startbud;
    }

    public void setStartTidspunkt(Calendar startTidspunkt) {
        this.startTidspunkt = startTidspunkt;
    }

    public void setSluttidspunkt(Calendar sluttidspunkt) {
        this.sluttidspunkt = sluttidspunkt;
    }

    public void tilføjTilBudHistorik(Bud bud) {
        budHistorik.add(bud);
        notifyListeners("bud");
    }

    public void setBruger(Bruger bruger) {
        this.bruger = bruger;
    }

    public void setEnVare(Vare enVare) {
        this.vare = enVare;
    }

    public ImageIcon getVareIcon() {
        return vare.getIcon();
    }
}
